package com.jzo2o.market.service;

import com.jzo2o.common.model.PageResult;
import com.jzo2o.market.model.domain.Activity;
import com.baomidou.mybatisplus.extension.service.IService;
import com.jzo2o.market.model.dto.request.ActivityQueryForPageReqDTO;
import com.jzo2o.market.model.dto.request.ActivitySaveReqDTO;
import com.jzo2o.market.model.dto.response.ActivityInfoResDTO;
import com.jzo2o.market.model.dto.response.SeizeCouponInfoResDTO;

import java.util.List;

/**
 * <p>
 * 服务类
 * </p>
 */
public interface IActivityService extends IService<Activity> {

    /**
     * 保存优惠券活动接口
     * 作用：新增或修改一个活动信息
     */
    void saveActivity(ActivitySaveReqDTO activitySaveReqDTO);

    /**
     * 分页查询优惠券活动
     */
    PageResult<ActivityInfoResDTO> queryForPage(ActivityQueryForPageReqDTO activityQueryForPageReqDTO);

    /**
     * 查询优惠券活动详情
     */
    ActivityInfoResDTO queryById(Long id);

    /**
     * 活动撤销
     */
    void revoke(Long id);


    /**
     * 活动状态修改
     */
    void updateStatus();


    /**
     * 活动预热
     */
    void preHeat();


    /**
     * 用户端抢券列表分页查询活动信息
     *
     * @param tabType 页面类型
     * @return 优惠券列表
     */
    List<SeizeCouponInfoResDTO> queryForListWithCache(Integer tabType);

    /**
     * 从缓存中获取活动信息
     * @param id 活动id
     * @return 活动信息
     */
    ActivityInfoResDTO getActivityInfoByIdFromCache(Long id);


    /**
     * 扣减库存
     * @param id 活动id
     *  如果扣减库存失败抛出异常
     */
    public void deductStock(Long id);
}
